package com.bkhech.boot.autoconfigure.mybatis;

import com.bkhech.boot.configure.mybatis.MybatisConfig;
import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * MyBatisAutoConfigure
 *
 * 问题：
 * 在 application.properties 将 spring.main.allow-bean-definition-overriding 属性
 * 设置为 true 解决 bean 重复定义的问题
 *
 * 我的问题是如何在启动程序中执行此操作（我不希望启动程序的用户必须更改其application.properties文件，以实现特定于我的启动程序的内容）？
 *
 * Spring Boot的ErrorAttributes bean由ErrorMvcAutoConfiguration定义。
 * 它用@ConditionalOnMissingBean注释，因此如果已经定义了ErrorAttributes bean，它将取消。
 * 当您的ErrorsConfig类定义的bean试图覆盖Boot的ErrorAttributes bean而不是使其退出时，必须在Boot的
 * ErrorsConfig类之后对您的ErrorMvcAutoConfiguration类进行处理。这意味着您的起动器有加载顺序问题。
 * 最佳答案：
 * 可以使用@AutoConfigureBefore和@AutoConfigureAfter来控制自动配置类的处理顺序。
 * 假定ErrorsConfig本身是在spring.factories中注册的自动配置类，则可以通过
 * 用@AutoConfigureBefore(ErrorMvcAutoConfiguration.class)注释它来解决问题。
 * 进行此更改后，ErrorsConfig将在尝试尝试ErrorAttributes之前定义其ErrorMvcAutoConfiguration bean，
 * 这将导致Boot的ErrorsAttribute bean的自动配置退出。
 * 参考：
 * {@literal https://www.lmlphp.com/user/151224/article/item/2938906/}
 *
 * Created by guowm on 18-5-7.
 */
@Configuration
@ConditionalOnClass(MybatisAutoConfiguration.class)
@AutoConfigureBefore(MybatisAutoConfiguration.class)
@Import(MybatisConfig.class)
public class MyBatisAutoConfiguration {
    
}
